#ifndef SS_CMNDEFINE_H_
#define SS_CMNDEFINE_H_


#ifdef WIN32
#pragma pack(push)
#pragma pack(1)
#define Y_RD_PACKED	
#else
#define Y_RD_PACKED	__attribute__ ((packed))
#endif


const int MAX_QUOTA_STATUS_LEN = 2;
const int MAX_HQTYPE_LEN = 2;

#define Y_RD_MSG_MAGIC					382923
#define Y_RD_APPEND_ADDR_LEN			30
#define	Y_RD_SERVICE_MESSAGE_BLOCK_LEN	2048*20
#define Y_RD_AES_KEY_LEN				16
#define Y_RD_AES_KEY_LOGIN				"jwxop71#t(mk9h_i"

#define Y_RD_AES_BLOCK_LEN				16
#define Y_RD_RECV_TIME_OUT				1000000


#ifndef Y_RD_USERNAME_LEN
#define	Y_RD_USERNAME_LEN				32+1
#define	Y_RD_USERID_LEN					10
#define Y_RD_PASSWD_LEN					32+1
#define	Y_RD_COUNTER_LEN				16
#define Y_RD_COOKIE_LEN					21
#define Y_RD_HOST_LEN					64//支持域名

#define Y_RD_DATE_LEN						8
#define Y_RD_TIME_LEN						6
#define Y_RD_DATETIME_LEN					24
#define Y_RD_RESERVE_LEN				20
#endif //Y_RD_USERNAME_LEN

namespace qb
{

	enum _eRetCode_t
	{
		E_RC_OK = 0,	//成功
		E_RC_DUPLOGIN = 1,//重复登录
		E_RC_PASSWD_ERR = 2,//密码错误
		E_RC_USER_ERR = 3,//用户不存在
		E_RC_NOLOGIN = 4,// 未登陆,找不到网关
		E_RC_ERROR = 5,// 失败
		E_RC_VERSION_CHECK = 6,// 有新版本
		E_RC_IP_CHECK = 7,// IP检查失败
		E_RC_CONN_ERR = 8,// 连接失败
		E_RC_COOKIE_ERR = 9,// 失败
		E_RC_NODATA = 10,//无对应数据
		E_RC_MAC_CHECK = 11,//Mac校验失败
		E_RC_EXPIRED_USER = 12,//过期
		E_RC_IP_IN_BLACKLIST = 13,//IP在黑名单
		E_RC_NEED_RELOGIN = 14,//需要重新登录
		E_RC_TIMEOUT = 15,	//登录超时，需要重登
		E_RC_NOSERVERLIST = 16	//未读取到服务器配置

	};

	enum MaxLen
	{
		MaxLenAddress = 256,
		MaxLenUser = 128,
		MaxLenPasswd = 128,
	};

	enum ConnectionError
	{
		E_SUCCESS = 0,					//成功
		E_PROXY_CANNOT_CONNECT = 1001,	//不能连接到代理服务器
		E_PROXY_SOCKS_CONNECT_FAIL,		//不能建立SOCKS连接
		E_PROXY_SOCKS_AUTH_FAIL,		//SOCKS用户验证失败
		E_PROXY_HTTP_VERSION_ERR,		//HTTP协议版本不匹配
		E_PROXY_HTTP_AUTH_FAIL,			//HTTP验证失败	407
		E_PROXY_HTTP_SERVER_UNAVAILABLE,//HTTP服务器不可用 5xx	
		E_PROXY_HOST_CONNECT_FAIL,		//不能通过代理服务器连接目标主机
		E_HOST_CONNECT_FAIL,			//不能直接连接目标主机
		E_PROXY_NETWORK_TIMEOUT,		//网络超时（若干秒内收不到数据）
		E_SEND_TESTMSG_FAIL,			//发送测试连接消息失败
		E_RECV_TESTMSG_FAIL,			//接收测试连接消息失败
		E_RECV_EOF,						//ACE::OS Recv返回0，中断连接
		E_TESTCONNECT_READSERVER_FAIL,	//读取服务器配置失败
		E_SEND_RTTMSG_FAIL,				//发送网络测速包失败
		E_RECV_RTTMSG_FAIL				//接收网络测速包失败
	};

    enum ProxyType2
	{
		TypeNone = 0,
		TypeSocks4 = 1,
		TypeSocks5 = 2,
		TypeHTTPS = 3,
		TypeIE = 4,
		TypeHTTP
	};


	enum _eAutoLgnFlag
	{
		E_UPDATE_DEFAULT = 0,   //静默升级
		E_UPDATE_AUTO = 1,		//1--自动更新
		E_UPDATE_IGNORE = 2,	//2--不提示更新,禁止升级
		E_UPDATE_FORCE = 3,		//3--强制更新
		E_UPDATE_OVERRIDE = 4,	//覆盖,add XW20141223

		E_LASTEST_UPDATE_DEFAULT = 1000, //最新版静默升级
		E_LASTEST_UPDATE_AUTO = 1001,      //最新版自动更新
		E_LASTEST_UPDATE_FORCE = 1003,     //最新版强制升级
		E_LASTEST_UPDATE_OVERRIDE = 1004,//最新版覆盖升级
	};



	struct _xMsgHeadReq_t
	{
		int msgtype;//消息类型，即功能编号
	}Y_RD_PACKED;
	typedef struct _xMsgHeadReq_t xMsgHeadReq_t;

	struct _xMsgHeadAck_t
	{
		int msgtype;														//消息类型，即功能编号
		short retcode;													//标志 : 0 成功，非0 失败
		char desc[20];													//描述
		short num;
		short idx;
		short records;													//当前包的记录数
	}Y_RD_PACKED;
	typedef struct _xMsgHeadAck_t xMsgHeadAck_t;

}

#ifdef WIN32
#pragma pack(pop)
#endif
#endif

